package recomendadorWeb;

import java.util.ArrayList;
import java.util.List;
import java.util.Hashtable;

enum IO{IN, OUT, INOUT};

public class TrazaVars {

		private int HS;
		private int indice;
		private String etiqueta;
		private int tipo;
		private Object valor;
		private IO io;
		
		public TrazaVars(int HS,int indice, String etiqueta, int tipo, Object valor, IO io) {
			this.HS=HS;
			this.indice = indice;
			this.etiqueta = etiqueta;
			this.tipo = tipo;
			this.valor=valor;
			this.io=io;
		}

		public int getHS() {
			return this.HS;
		}

		public void setHS(int HS) {
			this.HS = HS;
		}
		public int getIndice() {
			return this.indice;
		}

		public void setIndice(int indice) {
			this.indice = indice;
		}

		public String getEtiqueta() {
			return this.etiqueta;
		}

		public void setEtiqueta(String etiqueta) {
			this.etiqueta = etiqueta;
		}

		public int getTipo() {
			return tipo;
		}

		public void setTipo(int tipo) {
			this.tipo = tipo;
			
		}
		
		public IO getIO() {
			return this.io;
		}

		public void setIO(IO io) {
			this.io = io;
		}

		public String getValor(){
			String valor = "";
			if (this.getTipo() == 0)
				valor = Integer.toString(this.getInt());
			else if (this.getTipo() == 1)
				valor = Double.toString(this.getDouble());
			else if (this.getTipo() == 2) {
				valor = "[";
				for (int j = 0; j < this.getArrayDou().length - 1; j++) {
					valor = valor + this.getArrayDou()[j] + ", ";
				}
				int posFin = this.getArrayDou().length - 1;
				valor = valor + this.getArrayDou()[posFin] + "]";
			} else if (this.getTipo() == 3) {
				valor = "lista: " + this.getList();
			} else if (this.getTipo() == 6) {
				valor = "[";
				for (int j = 0; j < this.getArrayGen().length - 1; j++) {
					valor = valor + this.getArrayGen()[j] + ", ";
				}
				int posFin = this.getArrayGen().length - 1;
				valor = valor + this.getArrayGen()[posFin] + "]";
			} else if (this.getTipo() == 4) {
				valor = "{\n";
				Hashtable<Generos, Double> ht = this.getValorGenero();
				double val = 0;
				for (int j = 0; j < 10; j++) {
					val = ht.get(Generos.getGenero(j));
					valor = valor + "\t\t\t(" + Generos.getGenero(j) + "=>" 
							+ Math.rint(val * 100) / 100 + "), \n ";
				}
				val = ht.get(Generos.getGenero(10));
				valor = valor + "\t\t\t(" + Generos.getGenero(10) + "=>" + Math.rint(val * 100) / 100 + ")";
				valor = valor + " }\n\t\t";
			} else if (this.getTipo() == 7) {
				valor = "{\n";
				Hashtable<String, PorcentajeTemperamento[]> ht = this.getTGT3();
				PorcentajeTemperamento[] pt;
				for (int j = 0; j < 10; j++) {
					pt = ht.get(Generos.getGeneroString(j));
					valor = valor + "\t\t\t(" + Generos.getGeneroString(j) + " => [";
					for (int k = 0; k < 3; k++) {
						valor = valor + pt[k].getTemp() + "->" + pt[k].getPorcentaje() + ", ";
					}
					valor = valor + pt[3].getTemp() + "->" + pt[3].getPorcentaje() + "] ), \n";
				}
				pt = ht.get(Generos.getGeneroString(10));
				valor = valor + "\t\t\t(" + Generos.getGeneroString(10) + " => [";
				for (int k = 0; k < 3; k++) {
					valor = valor + pt[k].getTemp() + "->" + pt[k].getPorcentaje() + ", ";
				}
				valor = valor + pt[3].getTemp() + "->" + pt[3].getPorcentaje() + "]";
				valor = valor + ")}\n\t\t";
			} else if (this.getTipo() == 5) {
				valor = "(";
				PeliGeneros pg = this.getPeliGeneros();
				valor = valor + pg.getTitulo() + " => [";
				double porcentaje;
				Generos genero;
				PorcentajeGenero pgen;
				ArrayList<PorcentajeGenero> arrPorgen = pg.getGeneros();
				if (arrPorgen.size()== 0){
					valor = valor + arrPorgen.size()+ "])";
				}
				else{
					for(int k=0;k<arrPorgen.size()-1;k++){
					 	pgen = arrPorgen.get(k);
						porcentaje = pgen.getPorcentaje();
						genero = pgen.getGenero();
						valor = valor + Generos.getGeneroString(genero) + "->" + Double.toString(porcentaje) + ", ";
					}
					int posFin = arrPorgen.size()-1;
					pgen = arrPorgen.get(posFin);
					porcentaje = pgen.getPorcentaje();
					genero = pgen.getGenero();
					valor = valor + Generos.getGeneroString(genero) + "->" + Double.toString(porcentaje) + "])";
				}
	
			}
	
			else
				valor = "";
			
			return valor;
	}
		
		public int getInt(){
			return (Integer)this.valor;
		}
		
		public double getDouble(){
			return (Double)this.valor;
		}
		
		public double[] getArrayDou(){
			return (double[])this.valor;
		}
		
		public Generos[] getArrayGen(){
			return (Generos[])this.valor;
		}
		
		@SuppressWarnings("unchecked")
		public List<PeliPuntuacion> getList(){
			return (List<PeliPuntuacion>)this.valor;
		}
		
		@SuppressWarnings("unchecked")
		public Hashtable<Generos, Double> getValorGenero(){
			return (Hashtable<Generos, Double>)this.valor;
		}
		
		@SuppressWarnings("unchecked")
		public Hashtable<String, PorcentajeTemperamento[]> getTGT3(){
			return (Hashtable<String, PorcentajeTemperamento[]>)this.valor;
		}
		
		public PeliGeneros getPeliGeneros(){
			return (PeliGeneros)this.valor;
		}
		
		public void setValor(Object valor) {
			this.valor = valor; 
		}	
}